Performing mathematical operations on large numbers can be a time-consuming and resource-intensive process. One method of handling large numbers involves dividing the numbers into smaller divisions, or words, having a fixed length. Numbers divided in this manner are termed “multi-precision” numbers. In the field of digital circuits, for instance, the binary representation of a large number can be stored in multiple words, wherein each word has a fixed length of n bits depending on the word size supported by the associated hardware or software. Although adding and subtracting multi-precision numbers can be performed relatively efficiently, multi-precision multiplication is much more complex and creates a significant bottleneck in applications using multi-precision arithmetic.
One application that requires multi-precision arithmetic is cryptography. Many public-key algorithms, including the Diffie-Hellman key exchange algorithm, elliptic curve cryptography, and the Elliptic Curve Digital Signature Algorithm (ECDSA), involve the multi-precision multiplication of large numbers. For example, elliptic curve systems perform multi-precision arithmetic on 128- to 256-bit numbers, while systems based on exponentiation employ 1024- to 2048-bit numbers.
In order to improve the performance of these and other cryptographic systems, it is desirable to improve the efficiency of the multi-precision multiplication algorithm. Any improvements, even if relatively small, can result in a significant increase in the overall performance of the application, because the multiplication algorithm can be called many times during normal operation.